package com.employment.service;

import com.mybatisflex.core.paginate.Page;
import com.employment.entity.JobPosition;

import java.math.BigDecimal;
import java.util.List;

/**
 * 职位管理服务接口
 * 
 * @author Employment System
 * @since 1.0.0
 */
public interface JobPositionService {

    /**
     * 创建职位
     *
     * @param jobPosition 职位信息
     * @return 创建结果
     */
    boolean createJob(JobPosition jobPosition);

    /**
     * 更新职位信息
     *
     * @param jobPosition 职位信息
     * @return 更新结果
     */
    boolean updateJob(JobPosition jobPosition);

    /**
     * 删除职位
     *
     * @param jobId 职位ID
     * @return 删除结果
     */
    boolean deleteJob(Long jobId);

    /**
     * 根据ID查询职位详情
     *
     * @param jobId 职位ID
     * @return 职位详情
     */
    JobPosition getJobById(Long jobId);

    /**
     * 分页查询职位列表
     *
     * @param page           分页参数
     * @param keyword        关键词
     * @param category       职位类别
     * @param city           城市
     * @param salaryMin      最低薪资
     * @param salaryMax      最高薪资
     * @param workExperience 工作经验
     * @param education      学历要求
     * @param workType       工作类型
     * @param status         状态
     * @return 职位分页列表
     */
    Page<JobPosition> getJobPage(Page<JobPosition> page,
                                String keyword,
                                String category,
                                String city,
                                BigDecimal salaryMin,
                                BigDecimal salaryMax,
                                String workExperience,
                                String education,
                                Integer workType,
                                Integer status);

    /**
     * 根据公司ID查询职位列表
     *
     * @param companyId 公司ID
     * @param status    状态
     * @return 职位列表
     */
    List<JobPosition> getJobsByCompanyId(Long companyId, Integer status);

    /**
     * 发布职位
     *
     * @param jobId 职位ID
     * @return 发布结果
     */
    boolean publishJob(Long jobId);

    /**
     * 下线职位
     *
     * @param jobId 职位ID
     * @return 下线结果
     */
    boolean offlineJob(Long jobId);

    /**
     * 增加职位浏览次数
     *
     * @param jobId 职位ID
     * @return 更新结果
     */
    boolean increaseViewCount(Long jobId);

    /**
     * 查询热门职位
     *
     * @param limit 限制数量
     * @return 热门职位列表
     */
    List<JobPosition> getHotJobs(Integer limit);

    /**
     * 根据用户求职意向推荐职位
     *
     * @param userId 用户ID
     * @param limit  限制数量
     * @return 推荐职位列表
     */
    List<JobPosition> getRecommendJobs(Long userId, Integer limit);

    /**
     * 统计职位数据
     *
     * @return 统计数据
     */
    List<String> getJobStats();

    /**
     * 批量更新职位状态
     *
     * @param jobIds 职位ID列表
     * @param status 新状态
     * @return 更新结果
     */
    boolean batchUpdateStatus(List<Long> jobIds, Integer status);
}